﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Uurrooster_opdracht
{
    public partial class FormLokaal : Form
    {
       //****************************************attributen
        DataClasses1DataContext DB;
        static List<tblLokaal> lijstLok;
        static int index;
        Boolean wegschrijven = false;

        public FormLokaal()
        {
            InitializeComponent();
            DB = new DataClasses1DataContext();
            lijstLok = DB.tblLokaals.ToList();
            setWegschrijven(false);
            maakInfoLeeg();
        }

        private void FormLokaal_Load(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            butAdd.Enabled = false;
            setWegschrijven(false);
            butFirst_Click(null, null);
           
        }
        //**************************************methoden voor knoppen
       //ADD
        private void butAdd_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            setWegschrijven(false);
            resetLijst();
            tblLokaal nieuw = new tblLokaal();
            nieuw.lokaalNaam = getNaamLokaal();
            nieuw.lokaalLocatie = getLocatie();
            if (getWegschrijven() == true)
                {
                    DB.SubmitChanges();
                    displayLokaalID(nieuw.lokaalID);
                    schrijfInfo("nieuw lokaal wordt weggeschreven");
                }
            resetLijst();
            DB.tblLokaals.InsertOnSubmit(nieuw);
            DB.SubmitChanges();
            displayLokaalID(nieuw.lokaalID);
            butAdd.Enabled = false;
            setWegschrijven(false);

        }
        //FIRST
        private void butFirst_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            butAdd.Enabled = false;
            index = 0;
            displayLokaalID(lijstLok.First().lokaalID);
            schrijfInfo("dit is de 1ste record");

        }
        //NEXT
        private void butNext_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            butAdd.Enabled = false;
            if (index < lijstLok.Count - 1)
                {
                    index++;
                }
            else
                {
                    index = 0;
                }
            tblLokaal lokaal = lijstLok[index];
            long volgendeID = Convert.ToInt64(lokaal.lokaalID);
            displayLokaalID(volgendeID);
        }
        //PREVIOUS
        private void butPrevious_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            butAdd.Enabled = false;
            if (index > 0)
            {
                index--;
            }
            else
            {
                index = 0;
            }
            tblLokaal lokaal = lijstLok[index];
            displayLokaalID(Convert.ToInt64(lokaal.lokaalID));

        }
        //LAST
        private void butLast_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            butAdd.Enabled = false;
            tblLokaal lokaal = lijstLok[lijstLok.Count - 1];
            displayLokaalID(Convert.ToInt64(lokaal.lokaalID));
            index = lijstLok.Count - 1;
            schrijfInfo("dit is de laatste record");
        }
        //CLEAR
        private void butClear_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            textNaam.Text = "";
            textLocatie.Text = "";
            textID.Text = "";
            butAdd.Enabled = true;
            schrijfInfo("velden zijn leeg gemaakt");
        }
        //EDIT
        private void butEdit_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            setWegschrijven(false);
            butAdd.Enabled = false;
            long huidigeID = Convert.ToInt64(textID.Text);
            tblLokaal gekozen = (from tblLokaal in DB.tblLokaals
                                 where tblLokaal.lokaalID == huidigeID
                                 select tblLokaal).First();
            gekozen.lokaalNaam = getNaamLokaal();
            gekozen.lokaalLocatie = getLocatie();
            if (getWegschrijven() == true)
                {
                    DB.SubmitChanges();
                    displayLokaalID(gekozen.lokaalID);
                    schrijfInfo("wijzigingen worden weggeschreven");
                }
            else
                {
                    schrijfInfo("wegschrijven = FALSE");
                    resetLijst();
                }
            resetLijst();
            setWegschrijven(false);
            
        }
        //DELETE
        private void butDelete_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            long huidigeID = Convert.ToInt64(textID.Text);
            var q = (from tblLokaal in DB.tblLokaals
                     where tblLokaal.lokaalID == huidigeID
                     select tblLokaal);
            MessageBox.Show("u staat op het punt deze record te verwijderen");
            DB.tblLokaals.DeleteOnSubmit(q.First());
            DB.SubmitChanges();
            butFirst_Click(null, null);
        }
        //SEARCH
        private void butSearch_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            resetLijst();
            butAdd.Enabled = false;
            comboSearch.DataSource = null;
            String gezocht = textInput.Text;
            if (lijstLok.Count > 0)
            {
                IQueryable query = (from tblLokaal in DB.tblLokaals
                                    where tblLokaal.lokaalNaam.Trim() == gezocht
                                    || tblLokaal.lokaalLocatie.Trim() == gezocht
                                    select tblLokaal.lokaalNaam.Trim() + " " +
                                    tblLokaal.lokaalLocatie.Trim() + "/" + tblLokaal.lokaalID);
                comboSearch.DataSource = query;
                int match = comboSearch.Items.Count;
                textResult.Text = "matches: " + Convert.ToString(match);
                
            }

        }
        //ADMIT
        private void butAdmit_Click(object sender, EventArgs e)
        {
            maakInfoLeeg();
            butAdd.Enabled = false;
            int plaats = comboSearch.SelectedItem.ToString().IndexOf("/");
            String id = (comboSearch.SelectedItem.ToString().Remove(0, plaats + 1));
            displayLokaalID(Convert.ToInt64(id));
            schrijfInfo("velden ingevuld door zoekmachine");
        }
        //**************************************andere methoden
        //RESET LIJST
        private void resetLijst()
        {

            lijstLok = DB.tblLokaals.ToList();
            tblLokaal lokaal = lijstLok[index];

            textAantal.Text = "aantal lokalen: " + Convert.ToString(lijstLok.Count());
        }
        //DISPLAY met ID number
        private void displayLokaalID(long x)
        {
            resetLijst();
            //String tekst = "";
            try
                {
                    tblLokaal gekozen = (from tblLokaal in DB.tblLokaals
                                         where tblLokaal.lokaalID == x
                                         select tblLokaal).First();
                    textNaam.Text = gekozen.lokaalNaam;
                    textLocatie.Text = gekozen.lokaalLocatie;

                    //tekst = Convert.ToString(gekozen.docentID);
                    textID.Text = Convert.ToString(gekozen.lokaalID);
                }
            catch
                {

                }
        }
        //setter of er mag weggeschreven worden of niet.
        private void setWegschrijven(Boolean b)
        {
            wegschrijven = b;
        }
        //getter of er mag weggeschreven worden of niet.
        private Boolean getWegschrijven()
        {
            return wegschrijven;
        }
        //maak INFO textVeld leeg
        private void maakInfoLeeg()
        {
            textInfo.Text = "";
        }
        //schrijf info
        private void schrijfInfo(String info)
        {
            textInfo.Text = info;
        }
        //naam Lokaal op de juiste lengte
        private String getNaamLokaal()
        {
            if (textNaam.Text.Trim() == "")
                {
                    setWegschrijven(false);
                    schrijfInfo("field NAME is empty !!");
                }
            else
                {
                    setWegschrijven(true);

                }
            return textNaam.Text.PadRight(20).Substring(0, 20);
        }
        //locatie Lokaal op de juiste lengte
        private String getLocatie()
        {
            if (textLocatie.Text.Trim() == null)
                {
                    setWegschrijven(false);
                    textInfo.Text = "FIELD FIRST NAME is empty !!";
                }
            else
                {
                    setWegschrijven(true);

                }
            return textLocatie.Text.PadRight(20).Substring(0, 20);
        }

        private void textInfo_TextChanged(object sender, EventArgs e)
        {

        }

        private void textAantal_TextChanged(object sender, EventArgs e)
        {
        
        }

        private void textNaam_TextChanged(object sender, EventArgs e)
        {

        }

        private void textLocatie_TextChanged(object sender, EventArgs e)
        {

        }

       

       

      

        

       

       

       

       

        

       
    }
}
